﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DataAccessLayer;
using System.Configuration;
using DTO;
using System.Data;

namespace DAL
{
    public class ChiTietHoaDonDAL
    {
        private DBManager _dbmanager;

        #region Phương thức khởi tạo
        /// <summary>
        /// Phương thức khởi tạo
        /// </summary>
        public ChiTietHoaDonDAL()
        {
            string _connectionInfo = ConfigurationManager.AppSettings["ConnectionInfo"];
            _dbmanager = new DBManager(DataProvider.SqlServer, _connectionInfo);
        }
        #endregion

        #region Tạo Object từ DataReader
        /// <summary>
        /// Tạo Object từ DataReader
        /// </summary>
        /// <param name="reader">IDataReader</param>
        /// <returns>ChiTietHoaDonDTO</returns>
        private ChiTietHoaDonDTO CreateChiTietHoaDonFromReader(IDataReader reader)
        {
            ChiTietHoaDonDTO _cthdDTO = new ChiTietHoaDonDTO();

            _cthdDTO.MaChiTietHoaDon = Convert.ToInt32(reader["MaChiTietHoaDon"]);
            _cthdDTO.MaSanPham = reader["MaSanPham"].ToString();
            _cthdDTO.MaHoaDon = reader["MaHoaDon"].ToString();
            _cthdDTO.DonViTinh = reader["DonViTinh"].ToString();
            _cthdDTO.SoLuong = Convert.ToInt32(reader["SoLuong"]);
            _cthdDTO.DonGia = Convert.ToDecimal(reader["DonGia"]);

            return _cthdDTO;
        }
        #endregion

        #region Thêm
        /// <summary>
        /// Thêm
        /// </summary>
        /// <param name="cthdDTO">ChiTietHoaDonDTO</param>
        public void Them(ChiTietHoaDonDTO cthdDTO,DBManager dbmanager)
        {
            try
            {

                dbmanager.CreateParameters(5);
                dbmanager.AddParameters(0, "@ma_sp", cthdDTO.MaSanPham);
                dbmanager.AddParameters(1, "@ma_hd", cthdDTO.MaHoaDon);
                dbmanager.AddParameters(2, "@don_vt", cthdDTO.DonViTinh);
                dbmanager.AddParameters(3, "@soluong", cthdDTO.SoLuong);
                dbmanager.AddParameters(4, "@dongia", cthdDTO.DonGia);

                dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_ThemChiTietHoaDon");
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }

        }
        #endregion

        #region Phương thức lấy danh sách chi tiết hóa đơn dựa theo mã hóa đơn và mã sản phẩm
        /// <summary>
        /// Phương thức lấy danh sách chi tiết hóa đơn dựa theo mã hóa đơn và mã sản phẩm
        /// </summary>
        /// <param name="mahoadon"></param>      
        /// <returns></returns>
        public List<ChiTietHoaDonDTO> GetListChiTietHoaDon(string mahoadon)
        {
            List<ChiTietHoaDonDTO> lst = new List<ChiTietHoaDonDTO>();
            IDataReader reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_hd", mahoadon);
                reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListChiTietHoaDon");
                while (reader.Read())
                    lst.Add(this.CreateChiTietHoaDonFromReader(reader));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (reader != null)
                    reader.Close();
                _dbmanager.Close();
            }
            return lst;
        }
        #endregion
    }

}